package delphorm.web.controller;



import javax.servlet.http.HttpServletRequest;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.mvc.SimpleFormController;

import delphorm.entite.personne.DroitQuestionnaire;
import delphorm.entite.personne.GroupeCollectif;
import delphorm.entite.questionnaire.Questionnaire;
import delphorm.service.personne.IGroupeCollectif;


public class GererDroitsGroupesQuestionnaire extends SimpleFormController {


	//private IQuestionnaire serviceQuestionnaire;
	private IGroupeCollectif serviceGroupeCollectif;
	
	protected Object formBackingObject(HttpServletRequest request)
	{
		//récupère le formulaire dans la session
		Object formulaire = request.getSession().getAttribute("formulaire");
		
		if(formulaire == null)
		{
			Questionnaire questionnaire = (Questionnaire)request.getSession().getAttribute("questionnaire");
			String nomGroupe = request.getParameter("nomgroupe");
			if(nomGroupe==null || nomGroupe.trim().equals(""))
			{
				
				formulaire = questionnaire.getNouveauDroitGroupe();
			}
			else
			{
				formulaire = questionnaire.getDroitGroupe(nomGroupe);
			}
		}
		//TODO vérifier si formulaire est null?
		//questionnaire.getDroitGroupe peut retourner null
		return formulaire;
	}

	public IGroupeCollectif getServiceGroupeCollectif() {
		return serviceGroupeCollectif;
	}

	public void setServiceGroupeCollectif(IGroupeCollectif serviceGroupeCollectif) {
		this.serviceGroupeCollectif = serviceGroupeCollectif;
	}

	protected void onBindAndValidate(HttpServletRequest request, Object formulaire, BindException errors) throws Exception {
		if(!errors.hasErrors())
		{
			DroitQuestionnaire droitsQuestionnaire = (DroitQuestionnaire)formulaire;
			//permet d'éviter les doublons pour un groupe
			DroitQuestionnaire autresDroitsMemeGroupe = 
				droitsQuestionnaire.getQuestionnaire().getDroitGroupe(droitsQuestionnaire.getGroupe().getNom());
			if( autresDroitsMemeGroupe != null)
			{
				droitsQuestionnaire.getQuestionnaire().getDroitsGroupes().remove(autresDroitsMemeGroupe);
			}
			//permet de faire le binding avec l'objet GroupeCollectif en fonction d'après le nom du groupe
			GroupeCollectif groupe = serviceGroupeCollectif.chercherGroupeParNom(droitsQuestionnaire.getGroupe().getNom());
			droitsQuestionnaire.setGroupe(groupe);
		}
	}

	
}
